package com.cwt_taxi_xa.protocol;

import com.cwt_taxi_xa.constants.ConstantsAram;
import com.cwt_taxi_xa.constants.ConstantsState;
import com.cwt_taxi_xa.model.GpsLocationInfo;
import com.cwt_taxi_xa.model.RecorderInfo;
import com.cwt_taxi_xa.util.AppLog;
import com.cwt_taxi_xa.util.DateUtil;
import com.cwt_taxi_xa.util.ExceptionUtil;
import com.cwt_taxi_xa.util.GPSUtil;
import com.cwt_taxi_xa.util.Tools;

import java.util.Date;


public class EncoderUtil {

	/**
	 * 位置信息汇报
	 * @param type 2 不带附加信息
	 * @return
	 */
	public static byte[] getLocationInformationByte(){
		try {
			//获取位置信息
			GpsLocationInfo locationInfo = GPSUtil.getInstance().getLocInfo();

			byte[] body = new byte[25];
			int dstPos = 0;
			//报警标志
			System.arraycopy(ConstantsAram.getAlarmStateByte(), 0, body, dstPos, 4);
			dstPos+=4;

			//状态位
			System.arraycopy(ConstantsState.getStateByte(), 0, body, dstPos, 4);
			dstPos+=4;

			//纬度
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLat()), 4)), 0, body, dstPos, 4);
			//			System.arraycopy(Tools.sortToByte(Tools.double2Byte(Constants.testLatD)), 0, body, dstPos, 4);
			dstPos+=4;

			//经度
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLng()), 4)), 0, body, dstPos, 4);
			//			System.arraycopy(Tools.sortToByte(Tools.double2Byte(Constants.testLngD)), 0, body, dstPos, 4);
			dstPos+=4;

			//速度
			int speed = 0;
			if(locationInfo!=null){
				if(locationInfo.getSpeed() != null){
					speed = locationInfo.getSpeed();
				}
			}
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(speed,2)), 0, body, dstPos, 2);
			dstPos+=2;

			//方向
			int direction = 0;
			if(locationInfo!=null){
				if(locationInfo.getDirection() != null){
					direction = locationInfo.getDirection();
				}
			}
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(direction/2,1)), 0, body, dstPos, 1);
			dstPos+=1;

			//			System.out.println("时间="+systemdate);
			//时间
			System.arraycopy(Tools.str2Bcd(DateUtil.df8.format(new Date(locationInfo.getTime()))), 0, body, dstPos, 6);
			dstPos+=6;

			return body;
		} catch (Exception e) {
			AppLog.e(ExceptionUtil.getInfo(e));
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 多媒体数据头部 128字节
	 * @return
	 */
	public static byte[] getRecordingFileHeadByte(RecorderInfo info){
		try {
			byte[] body = new byte[128];
			int dstPos = 0;

			// 0	终端ID号	BCD[5]	MCU终端的ID号
			System.arraycopy(Tools.str2Bcd(DeviceBiz.getDeviceCode().substring(2)), 0, body, dstPos, 5);
			dstPos+=5;
			// 5	编码方式	BCD	各厂商自定义，需根据终端ID号中的厂商编码及编码方式 提供相应的解压缩接口
			dstPos+=1;
			// 6	车牌号	STRING[10]	车牌号，不足长度以’\0’填充
			String carNumber = DeviceBiz.getCarNumber();
			while(carNumber.length()<10){
				carNumber += "\0";
			}
			byte[] carNumberByte = carNumber.getBytes("GBK");
			System.arraycopy(carNumberByte, 0, body, dstPos, carNumberByte.length);
			dstPos+=10;
			// 16	营运ID	UINT32
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Integer.parseInt(info.getMediaId()), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 20	0：正常录音；1：乘客不满意（投诉）；2：报警录音
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(info.getReason(), 1)), 0, body, dstPos, 1);
			dstPos+=1;
			// 21	录音开始时间	BCD[6]	北京时间YYMMDDhhmmss
			System.arraycopy(Tools.str2Bcd(info.getTime()), 0, body, dstPos, 6);
			dstPos+=6;
			// 27	开始地点的纬度	UINT32	0.0001’
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(info.getsLat(), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 31	开始地点的经度	UINT32	0.0001’
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(info.getsLng(), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 35	录音结束时间	BCD[6]	北京时间YYMMDDhhmmss
			System.arraycopy(Tools.str2Bcd(info.getTime()), 0, body, dstPos, 6);
			dstPos+=6;
			// 42	结束地点的纬度	UINT32	0.0001’
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(info.geteLat(), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 46	结束地点的经度	UINT32	0.0001’
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(info.geteLng(), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 50	录音文件ID号	UINT32	录音文件在ISU中的文件ID号
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Integer.parseInt(info.getMediaId()), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 54	音频数据的大小	UINT32	音频数据的大小，单位：字节
			System.arraycopy(Tools.sortToByte(Tools.int2Bytes((int)info.getSize(), 4)), 0, body, dstPos, 4);
			dstPos+=4;
			// 58	RFU		保留为0
			return body;
		} catch (Exception e) {
			AppLog.e(ExceptionUtil.getInfo(e), e);
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 位置信息汇报
	 * @param type 1 带附加信息
	 * @return
	 */
//	public static byte[] getLocationInformationByte2(){
//		try {
//			//获取位置信息
//			GpsLocationInfo locationInfo = GPSUtil.getInstance().getLocInfo();
//
//			byte[] body = new byte[31];
//			int dstPos = 0;
//			//报警标志
//			System.arraycopy(ConstantsAram.getAlarmStateByte(), 0, body, dstPos, 4);
//			dstPos+=4;
//
//			//状态位
//			System.arraycopy(ConstantsState.getStateByte(), 0, body, dstPos, 4);
//			dstPos+=4;
//
//			//纬度
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLat()), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//
//			//经度
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLng()), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//
//			//速度
//			int speed = 0;
//			if(locationInfo!=null){
//				if(locationInfo.getSpeed() != null){
//					speed = locationInfo.getSpeed();
//				}
//			}
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(speed,2)), 0, body, dstPos, 2);
//			dstPos+=2;
//
//			//方向
//			int direction = 0;
//			if(locationInfo!=null){
//				if(locationInfo.getDirection() != null){
//					direction = locationInfo.getDirection();
//				}
//			}
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(direction,1)), 0, body, dstPos, 1);
//			dstPos+=1;
//
//			String systemdate = new SimpleDateFormat("yyMMddHHmmss").format(Calendar.getInstance().getTime()); // 获取系统当前时间
//			if(MyStatus.gps){
//				systemdate = DateUtil.gpsTimeToTime(locationInfo.getTime(), "yyMMddHHmmss");
//			}
//			//			System.out.println("时间="+systemdate);
//			//时间
//			System.arraycopy(Tools.str2Bcd(systemdate), 0, body, dstPos, 6);
//			dstPos+=6;
//
//			//附加信息ID
//			System.arraycopy(Tools.parseHexStr2Byte("01"), 0, body, dstPos, 1);
//			dstPos+=1;
//
//			//附加信息长度
//			System.arraycopy(Tools.parseHexStr2Byte("04"), 0, body, dstPos, 1);
//			dstPos+=1;
//
//			try {
//				int mileage = (int)(DistanceUtil.getMileage()/100);
//
//				//里程
//				System.arraycopy(Tools.sortToByte(Tools.int2Bytes(mileage,4)), 0, body, dstPos, 4);
//			} catch (Exception e) {
//				AppLog.e(ExceptionUtil.getInfo(e));
//				e.printStackTrace();
//				System.arraycopy(Tools.sortToByte(Tools.int2Bytes(0,4)), 0, body, dstPos, 4);
//			}
//			dstPos+=4;
//
//			return body;
//		} catch (Exception e) {
//			AppLog.e(ExceptionUtil.getInfo(e));
//			e.printStackTrace();
//			return null;
//		}
//	}

	/**
	 * 多媒体数据头部 128字节
	 * @return
	 */
//	public static byte[] getMediaFileHeadByte(PhotoInfo photoInfo){
//		try {
//			byte[] body = new byte[128];
//			int dstPos = 0;
//
//			// 0	终端ID号	BCD[5]	MCU终端的ID号
//			System.arraycopy(Tools.str2Bcd(DeviceBiz.getDeviceCode().substring(2)), 0, body, dstPos, 5);
//			dstPos+=5;
//			// 5	编码方式	BCD	各厂商自定义，需根据终端ID号中的厂商编码及编码方式 提供相应的解压缩接口
//			dstPos+=1;
//			// 6	车牌号	STRING[10]	车牌号，不足长度以’\0’填充
//			String carNumber = DeviceBiz.getCarNumber();
//			while(carNumber.length()<10){
//				carNumber += "\0";
//			}
//			System.arraycopy(carNumber.getBytes("GBK"), 0, body, dstPos, 10);
//			dstPos+=10;
//			// 16	营运ID	UINT32
//			System.arraycopy(BusinessFactory.getBusinessId(), 0, body, dstPos, 4);
//			dstPos+=4;
//			// 20	拍照原因	UINT8	0:进入重车拍照 1:服务评价拍照(包括投诉) 2：报警拍照  3：中心主动拍照
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(photoInfo.getEventCode(), 1)), 0, body, dstPos, 1);
//			dstPos+=1;
//			// 21	拍照时间	BCD[6]	北京时间 yy-mm-dd hh:mm:ss
//			System.arraycopy(Tools.str2Bcd(photoInfo.getTime()), 0, body, dstPos, 6);
//			dstPos+=6;
//			// 27	拍照地点的纬度	UINT32	1/10000分
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLat()), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//			// 31	拍照地点的经度	UINT32	1/10000分
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Tools.getSZLocation(getCurretnLng()), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//			// 35	照片文件ID号	UINT32	照片文件在MCU中的文件ID号
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes(Integer.parseInt(photoInfo.getMediaId()), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//			// 39	图像数据的大小	UINT32	图像数据的大小，单位：字节
//			System.arraycopy(Tools.sortToByte(Tools.int2Bytes((int)photoInfo.getSize(), 4)), 0, body, dstPos, 4);
//			dstPos+=4;
//			// 43	RFU		保留为0
//
//			return body;
//		} catch (Exception e) {
//			AppLog.e(ExceptionUtil.getInfo(e));
//			e.printStackTrace();
//			return null;
//		}
//	}

	/**
	 * 获取当前纬度
	 * @return
	 */
	public static int getCurretnLat() {
		int lat = 0;
//		int lat = Constants.testLat;
		GpsLocationInfo locationInfo = GPSUtil.getInstance().getLocInfo();
		if(locationInfo!=null){
			//纬度
			if(locationInfo.getLat() != null){
				lat = locationInfo.getLat();
			}
		}
		return lat;
	}

	/**
	 * 获取当前经度
	 * @return
	 */
	public static int getCurretnLng() {
		int lng = 0;
//		int lng = Constants.testLng;
		GpsLocationInfo locationInfo = GPSUtil.getInstance().getLocInfo();
		if(locationInfo!=null){
			//纬度
			if(locationInfo.getLat() != null){
				lng = locationInfo.getLng();
			}
		}
		return lng;
	}
}
